home *** CD-ROM | disk | FTP | other *** search
/ SPACE 1 / SPACE - Library 1 - Volume 1.iso / program / 516 / librarys / break.s < prev    next >
Text File  |  1991-09-22  |  2KB  |  46 lines

  1. ;************************************************************************
  2. ;* Falls sich ein Programm nicht debuggen läßt (IRQs, etc.), kann man    *
  3. ;* an einer kritischen Stelle dieses Modul einbinden. Nach RESET ist es *
  4. ;* dann mittels GETREGISTER mgl. die Stelle wiederzufinden (wenn der es *
  5. ;* der Debugger überlebt hat).                        *
  6. ;* ©1989 by Σ-soft, written by Markus Fritze           25.06.1988 01:57 *
  7. ;************************************************************************
  8. save_base    equ $300         ;Die Basisadresse ($300.w) ist (fast) will-
  9. ;                      kürlich gewählt, aber GETREGISTER nimmt
  10. ;                      $300 als Default. Zudem liegt $300
  11. ;                      im Reset-festem Speicherbereich, d.h.
  12. ;                      falls ein RESET ohne Debugger aus-
  13. ;                      gelöst wird, bleiben die Daten er-
  14. ;                      halten (Reset-fest ist der Bereich
  15. ;                      kleiner $400, allerdings werden Teile
  16. ;                      durch Vektoren überschrieben)
  17.  
  18.     trap    #3             ;Trap #3 wird vom Debugger gesetzt. Es zeigt
  19. ;                      auf einen RTR, d.h. Es wird in den Super-
  20. ;                      visormodus geschaltet. Sonst wird nichts
  21. ;                      geändert. Falls man bereits im Supervisor-
  22. ;                      modus ist, kann man sich diesen Befehl
  23. ;                      sparen.
  24.  
  25.     movem.l d0-d7/a0-a7,save_base ;alle Register retten
  26.     lea    save_base+$40,a0     ;Platz für die restlichen Register
  27.     move    sr,12(a0)         ;SR retten (MOVEM & LEA beeinflussen
  28. ;                      das SR nicht!)
  29.     bsr.s    *+2             ;PC auf den Stack bringen
  30.     nop                 ;2 Byte Mindestdistanz für BSR.S
  31.     move.l    (sp)+,(a0)+         ;PC retten
  32.     move    usp,a1
  33.     move.l    a1,(a0)+         ;USP und
  34.     move.l    sp,(a0)          ;SSP nochmals einzeln retten
  35.  
  36. ;Falls es hier zuende sein soll, folgender Code:
  37.     addq.w    #1,$ffff8240.w         ;Ab hier flackert der Bildschirm
  38.     bra.s    *-6             ;nun nur noch RESET drücken
  39.  
  40. ;Sonst bitte diesen Code:
  41.     movem.l 32(a0),a0/a1         ;A0 und A1 wieder zurück
  42.     move    save_base+$4C,sr     ;SR auch wieder zurück
  43.  
  44. ;Das war's, wenn nun RESET gedrückt wird, kann man sich schnell alle Werte
  45. ;zurückholen (siehe GETREGISTER)
  46.